/**
 * @(#)com.pattern.p_02_observer.observer.Subject
 *
 * Copyright (c) 2014-2018 上海纬视瑞科技有限公司
 *
 * DESC:
 *
 */
package com.pattern.p_02_observer.observer;

import java.util.ArrayList;
import java.util.List;

/**
 * 抽象主题类
 * @author fusf
 * @version 1.0  2016/11/3
 */
public abstract class Subject {

    List<Observer> observerList = new ArrayList<Observer>();

    /**
     * 增加观察者
     * @param observer
     */
    public void attach(Observer observer) {
        observerList.add(observer);
    }

    /**
     * 移除观察者
     * @param observer
     */
    public void remove(Observer observer) {
        observerList.remove(observer);
    }

    /**
     * 向观察者（们）发出通知
     */
    public void notifyObservers() {
        for(Observer o : observerList)  {
            o.update();
        }
    }

}
